package com.demo.upload;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

/**
 * 文件上传的客户端
 * @author gy
 * @date 2022/5/4
 */
public class TCPFileUploadClient {
    public static void main(String[] args) throws Exception {
        //1. 客户端连接本机 8887端口
        Socket socket = new Socket(InetAddress.getLocalHost(),8887);

        //2. 创建读取磁盘文件的 文件输入流
        String filePath = "F:\\20220503\\qie.png";
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));

        //3. 将文件输入流 转换为 字节数组 bytes 就是文件对应的字节数组
        byte[] bytes = StreamUtils.streamToByteArray(bis);

        //4. 通过socket获取到 关联的 输出流，将bytes数据发送给服务端  简单做了下增强
        BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
        //5. 将文件对应的字节数组的内容，写入到 socket 通道
        bos.write(bytes);
        // 此时关闭 读取文件的 输入流
        bis.close();
        // 同时设置关闭写入数据的结束标记
        socket.shutdownOutput();

        // 通过socket获取到与之相关联的 输入流
        InputStream inputStream = socket.getInputStream();
        // 使用 StreamUtils 将输入流转换成 字符串
        String s = StreamUtils.streamToString(inputStream);
        // 输出显示
        System.out.println(s);

        //6. 关闭相关的流
        inputStream.close();
        bos.close();
        socket.close();
    }
}
